﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TeamCommunitySolution.Modules.TeamEvents.Requests;
using TeamCommunitySolution.Modules.TeamEvents.Responses;

namespace TeamCommunitySolution.Modules.TeamEvents
{
    /// <summary>
    /// The Team Event Manager Interfaces
    /// </summary>
    public interface TeamEventManager
    {
        /// <summary>
        /// Creates the team event.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Team Event Response.</returns>
        TeamEventResponse CreateTeamEvent(TeamEventCreateRequest request);

        /// <summary>
        /// Updates the team event.
        /// </summary>
        /// <param name="teamEventUpdateRequest">The team event update request.</param>
        /// <returns>Team Event Response.</returns>
        TeamEventResponse UpdateTeamEvent(TeamEventUpdateRequest teamEventUpdateRequest);

        /// <summary>
        /// Sends the specified invite request.
        /// </summary>
        /// <param name="inviteRequest">The invite request.</param>
        /// <returns>Team Invite Response.</returns>
        TeamEventInviteResponse Send(TeamEventInviteRequest inviteRequest);

        /// <summary>
        /// Gets the invite.
        /// </summary>
        /// <param name="teamEventInviteViewRequest">The team event invite view request.</param>
        /// <returns>Team Event Invite Response.</returns>
        TeamEventInviteResponse GetInvite(TeamEventInviteViewRequest teamEventInviteViewRequest);

        /// <summary>
        /// Gets the team event.
        /// </summary>
        /// <param name="teamEventRequest">The team event request.</param>
        /// <returns>Team Event Response.</returns>
        TeamEventResponse GetTeamEvent(TeamEventRequest teamEventRequest);

        /// <summary>
        /// Events the invite accept.
        /// </summary>
        /// <param name="acceptInviteRequest">The accept invite request.</param>
        /// <returns>Team Event Invite Response.</returns>
        TeamEventInviteResponse EventInviteAccept(TeamEventAcceptInviteRequest acceptInviteRequest);

        /// <summary>
        /// Events the invite decline.
        /// </summary>
        /// <param name="declineInviteRequest">The decline invite request.</param>
        /// <returns>Team Event Invite Response</returns>
        TeamEventInviteResponse EventInviteDecline(TeamEventDeclineInviteRequest declineInviteRequest);
    }
}
